package com.christina.engine.factory;

import com.christina.engine.execution.ServiceExecutor;

/**
 * 服务执行器工厂接口
 * 定义了创建服务执行器的基本契约
 * 
 * @author Christina
 */
public interface ServiceExecutorFactory {
    
    /**
     * 根据服务名称创建执行器
     * 
     * @param serviceName 服务名称
     * @return 服务执行器实例
     * @throws IllegalArgumentException 如果服务名称不支持
     */
    ServiceExecutor createExecutor(String serviceName);
    
    /**
     * 根据服务类型创建执行器
     * 
     * @param serviceType 服务类型
     * @return 服务执行器实例
     * @throws IllegalArgumentException 如果服务类型不支持
     */
    ServiceExecutor createExecutor(Class<?> serviceType);
    
    /**
     * 检查是否支持指定的服务名称
     * 
     * @param serviceName 服务名称
     * @return 是否支持
     */
    boolean supportsService(String serviceName);
    
    /**
     * 检查是否支持指定的服务类型
     * 
     * @param serviceType 服务类型
     * @return 是否支持
     */
    boolean supportsService(Class<?> serviceType);
    
    /**
     * 获取所有支持的服务名称
     * 
     * @return 支持的服务名称集合
     */
    java.util.Set<String> getSupportedServiceNames();
    
    /**
     * 获取所有支持的服务类型
     * 
     * @return 支持的服务类型集合
     */
    java.util.Set<Class<?>> getSupportedServiceTypes();
    
    /**
     * 注册新的执行器创建器
     * 
     * @param serviceName 服务名称
     * @param executorCreator 执行器创建器
     */
    void registerExecutorCreator(String serviceName, ExecutorCreator executorCreator);
    
    /**
     * 注销执行器创建器
     * 
     * @param serviceName 服务名称
     */
    void unregisterExecutorCreator(String serviceName);
    
    /**
     * 执行器创建器函数式接口
     */
    @FunctionalInterface
    interface ExecutorCreator {
        ServiceExecutor create();
    }
}